/**
 ****************************************************************************************************
 * @file        rng.c
 * @author      正点原子团队(ALIENTEK)
 * @version     V1.0
 * @date        2023-08-26
 * @brief       RNG驱动代码
 * @license     Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
 ****************************************************************************************************
 * @attention
 *
 * 实验平台:正点原子 ESP32-S3 开发板
 * 在线视频:www.yuanzige.com
 * 技术论坛:www.openedv.com
 * 公司网址:www.alientek.com
 * 购买地址:openedv.taobao.com
 *
 ****************************************************************************************************
 */

#include "rng.h"


/**
 * @brief       得到随机数
 * @param       无
 * @retval      获取到的随机数(32bit)
 */
uint32_t rng_get_random_num(void)
{
    uint32_t randomnum;
    
    randomnum = esp_random();
    
    return randomnum;
}

/**
 * @brief       得到某个范围内的随机数
 * @param       min,max: 最小,最大值.
 * @retval      得到的随机数(rval),满足:min<=rval<=max
 */
int rng_get_random_range(int min, int max)
{ 
    uint32_t randomnum;
    
    randomnum = esp_random();
    
    return randomnum % (max - min + 1) + min;
}


#if 0

i2c_obj_t i2c0_master;

void app_main(void)
{
    esp_err_t ret;
    uint8_t key;
    uint32_t random;
    uint8_t t = 0;
    ret = nvs_flash_init();                                         /* 初始化NVS */
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    
    LED_init();
    usart_init(115200); 
    i2c0_master = iic_init(I2C_NUM_0);  /* 初始化IIC0 */
    spi2_init();                        /* 初始化SPI2 */
    xl9555_init(i2c0_master);           /* IO扩展芯片初始化 spi上扩展端口要用*/
    lcd_init();                         /* 初始化LCD */

    

    lcd_clear(WHITE);

    lcd_show_string(30,50,"RNG TEST",BLACK,GREEN,16,0); 
    lcd_show_string(30,70,"BOOT:Get Random Num",BLACK,GREEN,16,0); 
    lcd_show_string(30,90,"Random Num:",BLACK,GREEN,16,0); 
    lcd_show_string(30,110,"Random Num[0-9]:",BLACK,GREEN,16,0); 
    while(1)
    {
        key = xl9555_key_scan(0);
        if (key == KEY0_PRES)                                            /* 获取随机数并显示至LCD */
        {
            random = rng_get_random_num();
            lcd_show_num(30 + 8 * 11, 90, random, 10,YELLOW,GRAY,16);
        }
        
        if ((t % 20) == 0)                                          /* 获取0~9间的随机数并显示至LCD */
        {
            LED_TOGGLE();                                           /* 每200ms,翻转一次LED */
            random = rng_get_random_range(0, 9);                    /* 取[0,9]区间的随机数 */
            lcd_show_num(30 + 8 * 16, 110, random, 1,YELLOW,GRAY,16);  /* 显示随机数 */
        }

        vTaskDelay(10);
        t++;
        
    }
}



#endif 